<template>
  <!-- 基本信息 -->
    <div class="message">
        <!-- Logo -->
        <div class="logo">
            <img :src="LOGO" alt="logo" class="logo-img"/>
            <div :class="{ name: true, 'text-hidden': true, long: siteUrl[0].length >= 6 }">
                <span class="bg">{{ siteUrl[0] }}</span>
                <span class="sm">.{{ siteUrl[1] }}</span>
            </div>
        </div>
        <!-- 简介 -->
        <div class="description cards" @click="changeBox">
            <div class="content">
                <Icon size="16">
                    <QuoteLeft/>
                </Icon>
                <div class="text">
                    <p>{{ descriptionText.hello }}</p>
                    <p>{{ descriptionText.text }}</p>
                </div>
                <Icon size="16">
                    <QuoteRight/>
                </Icon>
            </div>
        </div>
    </div>
</template>

<script setup>
import {Icon} from "@vicons/utils";
import {QuoteLeft, QuoteRight} from "@vicons/fa";
import {Error} from "@icon-park/vue-next";
import {mainStore} from "@/store";
import {computed, reactive, watch} from "vue";
import {DESC_HELLO, DESC_HELLO_OTHER, DESC_TEXT, DESC_TEXT_OTHER, LOGO, URL,} from '@/utils/constants.js';

const store = mainStore();

// 站点链接
const siteUrl = computed(() => {
    const url = URL;
    // 判断协议前缀
    if (url.startsWith("http://") || url.startsWith("https://")) {
        const urlFormat = url.replace(/^(https?:\/\/)/, "");
        return urlFormat.split(".");
    }
    return url.split(".");
});

// 简介区域文字
const descriptionText = reactive({
    hello: DESC_HELLO,
    text: DESC_TEXT,
});

// 切换右侧功能区
const changeBox = () => {
    if (store.getInnerWidth >= 990) {
        store.boxOpenState = !store.boxOpenState;
    } else {
        ElMessage({
            message: "当前页面宽度不足以开启盒子",
            grouping: true,
            icon: h(Error, {
                theme: "filled",
                fill: "#efefef",
            }),
        });
    }
};

// 监听状态变化
watch(
    () => store.boxOpenState,
    (value) => {
        if (value) {
            descriptionText.hello = DESC_HELLO_OTHER;
            descriptionText.text = DESC_TEXT_OTHER;
        } else {
            descriptionText.hello = DESC_HELLO;
            descriptionText.text = DESC_TEXT;
        }
    },
);
</script>

<style lang="scss" scoped>
.message {
  .logo {
    display: flex;
    flex-direction: row;
    align-items: center;
    animation: fade 0.5s;
    max-width: 460px;

    .logo-img {
      border-radius: 50%;
      width: 120px;
    }

    .name {
      width: 100%;
      padding-left: 22px;
      transform: translateY(-8px);
      font-family: "Pacifico-Regular";

      .bg {
        font-size: 5rem;
      }

      .sm {
        margin-left: 6px;
        font-size: 2rem;
        @media (min-width: 720px) and (max-width: 789px) {
          display: none;
        }
      }
    }

    @media (max-width: 768px) {
      .logo-img {
        width: 100px;
      }
      .name {
        height: 128px;

        .bg {
          font-size: 4.5rem;
        }
      }
    }

    @media (max-width: 720px) {
      max-width: 100%;
    }
  }

  .description {
    padding: 1rem;
    margin-top: 3.5rem;
    max-width: 460px;
    animation: fade 0.5s;

    .content {
      display: flex;
      justify-content: space-between;

      .text {
        margin: 0.75rem 1rem;
        line-height: 2rem;
        margin-right: auto;

        p {
          &:nth-of-type(1) {
            font-family: "Pacifico-Regular";
          }
        }
      }

      .xicon:nth-of-type(2) {
        align-self: flex-end;
      }
    }

    @media (max-width: 720px) {
      max-width: 100%;
      pointer-events: none;
    }
  }

  @media (max-width: 390px) {
    .logo {
      flex-direction: column;

      .logo-img {
        display: none;
      }

      .name {
        margin-left: 0;
        height: auto;
        transform: none;
        text-align: center;

        .bg {
          font-size: 3.5rem;
        }

        .sm {
          font-size: 1.4rem;
        }
      }
    }
    .description {
      margin-top: 2.5rem;
    }
  }
}
</style>
